package com.i2works.smartluolong.utils.entity;


import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * 返回工具类
 *
 * @author Liu Yutao <koal@vip.qq.com>
 * @date 2016/4/30 21:39
 */

public class R {


    /**
     * 返回成功
     */
    public static Result success() {
        return getResult(null, null, 0, true);
    }

    /**
     * 返回成功
     *
     * @param obj 成功对象
     */
    public static Result success(String msg) {
        return getResult(msg, null, 0, true);
    }

    /**
     * 返回成功
     *
     * @param obj 成功对象
     */
    public static Result success(Object obj) {
        return getResult(null, obj, 0, true);
    }

    /**
     * 返回成功
     *
     * @param obj 成功对象
     */
    public static Result success(String msg,Object obj) {
        return getResult(msg, obj, 0, true);
    }


    /**
     * 返回成功
     *
     * @param obj   成功对象
     * @param total 对象(list)数量
     */
    public static Result success(Object obj, Integer total) {
        return getResult(null, obj, total, true);
    }


    /**
     * 返回成功
     *
     * @param msg   成功消息
     * @param obj   成功对象
     * @param total 对象(list)数量
     */
    public static Result success(String msg, Object obj, Integer total) {
        return getResult(msg, obj, total, true);
    }


    /**
     * 返回错误
     */
    public static Result error() {
        return getResult(null, null, 0, false);
    }


    /**
     * 返回错误
     *
     * @param msg 错误消息
     */
    public static Result error(String msg) {
        return getResult(msg, null, 0, false);
    }

    /**
     * 返回错误
     *
     * @param msg 错误消息
     * @param obj 错误对象
     */
    public static Result error(String msg, Object obj) {
        return getResult(msg, obj, 0, false);
    }


    /**
     * 返回实际执行方法
     *
     * @param msg    消息
     * @param obj    对象
     * @param total  条数
     * @param status 状态，true返回success，false返回error
     */
    private static Result getResult(String msg, Object obj, Integer total, Boolean status) {
        Result<Object> result = new Result<>();
        result.setSuccess(status);
        if (StringUtils.isNotBlank(msg)) {
            result.setMsg(msg);
        }
        if (obj instanceof List) {
            List myList = (List) obj;
            result.setRows(myList);
            result.setTotal(total == null ? 0 : total);
        } else {
            result.setModel(obj);
        }
        return result;
    }


}
